package negocio.entidades;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.Min;

import negocio.enums.TipoProva;

@Entity
public class Prova implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private long id;
	
	private String descricao;
	
	private String temas;
	
	@Temporal(TemporalType.DATE)
	private Date dtCadastro;
	
	@Temporal(TemporalType.TIMESTAMP)
	private Date dtAbertura;
	
	@Temporal(TemporalType.TIMESTAMP)
	private Date dtEncerramento;
	
	@Min(0)
	private double peso;
	
	private int numQuest;
	
	private TipoProva tipo;
	
	private int dificuldadeMin;
	
	private int dificuldadeMax;
	
	private boolean status;

	// ------------------relacionamentos---------------------//
	@ManyToOne
	private Disciplina disciplina;
	
	@OneToMany(mappedBy="prova", fetch=FetchType.LAZY)
	private List<ProvaAluno> provaAlunos = new ArrayList<ProvaAluno>();

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Date getDtCadastro() {
		return dtCadastro;
	}

	public void setDtCadastro(Date dtCadastro) {
		this.dtCadastro = dtCadastro;
	}

	public Date getDtAbertura() {
		return dtAbertura;
	}

	public void setDtAbertura(Date dtAbertura) {
		this.dtAbertura = dtAbertura;
	}

	public Date getDtEncerramento() {
		return dtEncerramento;
	}

	public void setDtEncerramento(Date dtEncerramento) {
		this.dtEncerramento = dtEncerramento;
	}

	public double getPeso() {
		return peso;
	}

	public void setPeso(double peso) {
		this.peso = peso;
	}

	public int getNumQuest() {
		return numQuest;
	}

	public void setNumQuest(int numQuest) {
		this.numQuest = numQuest;
	}

	public TipoProva getTipo() {
		return tipo;
	}

	public void setTipo(TipoProva tipo) {
		this.tipo = tipo;
	}

	public int getDificuldadeMin() {
		return dificuldadeMin;
	}

	public void setDificuldadeMin(int dificuldadeMin) {
		this.dificuldadeMin = dificuldadeMin;
	}

	public int getDificuldadeMax() {
		return dificuldadeMax;
	}

	public void setDificuldadeMax(int dificuldadeMax) {
		this.dificuldadeMax = dificuldadeMax;
	}

	public boolean getStatus() {
		return status;
	}

	public void setStatus(boolean status) {
		this.status = status;
	}

	public Disciplina getDisciplina() {
		return disciplina;
	}

	public void setDisciplina(Disciplina disciplina) {
		this.disciplina = disciplina;
	}

	public List<ProvaAluno> getProvaAlunos() {
		return provaAlunos;
	}

	public void setProvaAlunos(List<ProvaAluno> provaAlunos) {
		this.provaAlunos = provaAlunos;
	}

	public String getTemas() {
		return temas;
	}

	public void setTemas(String temas) {
		this.temas = temas;
	}

}
